package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;

/**
 * @author By ZengPeng
 */
public class 力扣_643_子数组最大平均数I {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_643_子数组最大平均数I().findMaxAverage(new int[]{1,12,-5,-6,50,3},1));
    }

    /**
    题目：给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
     请你找出平均数最大且 长度为 k 的连续子数组，并输出该最大平均数。
     任何误差小于 10-5 的答案都将被视为正确答案。

     示例 1：
     输入：nums = [1,12,-5,-6,50,3], k = 4
     输出：12.75
     解释：最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

     示例 2：
     输入：nums = [5], k = 1
     输出：5.00000

    分析：【P 💜】
       1.左右指针:判断左右大小，改变sum的值
            --执行用时：2 ms, 在所有 Java 提交中击败了100.00%的用户
    边界值 & 注意点：
       1.
     **/
    public double findMaxAverage(int[] nums, int k) {
        int left =0,right=k,sum=0;
        while (left<k)
            sum+=nums[left++];
        left=0;
        int max =sum;
        while (right<nums.length){
            sum-=nums[left++];
            sum+=nums[right++];
            max= Math.max(sum,max);
        }
        return ((double)max)/k;
    }
}
